package com.irssproject.app.web.action.lectorRSS;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.irssproject.app.bean.lectorRSS.Feed;
import com.irssproject.app.bean.lectorRSS.Item;
import com.irssproject.app.bean.lectorRSS.Lectura;
import com.irssproject.app.bean.main.Usuari;
import com.irssproject.app.service.lectorRSS.iface.SubscripcioService;
import com.irssproject.app.utils.Constants;
import com.irssproject.app.web.action.JSONWrappers.ItemJSONWrapper;
import com.irssproject.app.web.action.JSONWrappers.LecturaJSONWrapper;
import com.irssproject.app.web.action.JSONWrappers.SubscripcioJSONWrapper;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class MostrarSubscripcioAction extends ActionSupport {
	
	private static final long serialVersionUID = 4960477602907077434L;

	private String feedURL;
	
	private List<LecturaJSONWrapper> lectures;
	
	private Long idSubscripcio;
	
	public Long getIdSubscripcio() {
		return idSubscripcio;
	}

	public void setIdSubscripcio(Long idSubscripcio) {
		this.idSubscripcio = idSubscripcio;
	}

	private String queMostrar;
	
	private Feed feed;
	private Usuari usuari;

	SubscripcioService subscripcioService;
	
	Map<String,Object> session;
	
	public MostrarSubscripcioAction(SubscripcioService subscripcioService)
	{
		this.subscripcioService = subscripcioService;
	}

	public List<LecturaJSONWrapper> getLectures() {
		return lectures;
	}

	public void setLectures(List<LecturaJSONWrapper> lectures) {
		this.lectures = lectures;
	}

	public String getFeedURL() {
		return feedURL;
	}

	public void setFeedURL(String feedURL) {
		this.feedURL = feedURL;
	}

	public String getQueMostrar() {
		return queMostrar;
	}

	public void setQueMostrar(String queMostrar) {
		this.queMostrar = queMostrar;
	}
	
	public String mostrarSubscripcio(){

		try
		{
			session = ActionContext.getContext().getSession();
			
			List<Lectura> llistaLectures = new ArrayList<Lectura>();		
			Lectura lectura;
			Item item;
			LecturaJSONWrapper lJSON;
			ItemJSONWrapper iJSON;
			SubscripcioJSONWrapper sJSON;
			List<LecturaJSONWrapper> llistaReturn = new ArrayList<LecturaJSONWrapper>();
			
			if (queMostrar.equals("0"))	
			{
				llistaLectures = subscripcioService.mostrarLecturesNoLlegides(idSubscripcio);
				Iterator<Lectura> it = llistaLectures.iterator();
				
				while (it.hasNext())
				{
					lectura = (Lectura)it.next();
					if (!lectura.isLlegida())
					{
						lJSON = new LecturaJSONWrapper();
						lJSON.setId(lectura.getId());
						lJSON.setLlegida(false);
						lJSON.setValorada(lectura.isValorada());
						
						iJSON = new ItemJSONWrapper();
						item = lectura.getItem();
						iJSON.setId(item.getId());
						iJSON.setDataPublicacio(item.getDataPublicacio());
						iJSON.setContingut(item.getContingut());
						iJSON.setLink(item.getLink());
						iJSON.setTitol(item.getTitol());
						lJSON.setItem(iJSON);
						
						sJSON = new SubscripcioJSONWrapper();
						sJSON.setId(idSubscripcio);
						
						lJSON.setSubscripcio(sJSON);
						
						llistaReturn.add(lJSON);
					}
				}

			}
			else if (queMostrar.equals("1"))
			{
//				setItems(subscripcioService.mostrarTotesLectures(idSubscripcio));	
				llistaLectures = subscripcioService.mostrarTotesLectures(idSubscripcio);
				Iterator<Lectura> it = llistaLectures.iterator();

				while (it.hasNext())
				{
					lectura = (Lectura)it.next();
					lJSON = new LecturaJSONWrapper();
					lJSON.setId(lectura.getId());
					lJSON.setLlegida(lectura.isLlegida());
					lJSON.setValorada(lectura.isValorada());
					
					iJSON = new ItemJSONWrapper();
					item = lectura.getItem();
					iJSON.setId(item.getId());
					iJSON.setDataPublicacio(item.getDataPublicacio());
					iJSON.setContingut(item.getContingut());
					iJSON.setLink(item.getLink());
					iJSON.setTitol(item.getTitol());
					lJSON.setItem(iJSON);
					
					sJSON = new SubscripcioJSONWrapper();
					sJSON.setId(idSubscripcio);

					lJSON.setSubscripcio(sJSON);
					
					llistaReturn.add(lJSON);
				}

			}

			setLectures(llistaReturn);
			
		}
		catch (Exception e) 
		{
			
			addActionError(getText("error.mostrarFeedAction.errorGeneric"+feedURL));
			e.printStackTrace();
			return ERROR;		
		}
		
		return SUCCESS;
	}

	public String marcarTotesLecturesLlegides(){
		
		subscripcioService.marcarTotesLecturesLlegides(getIdSubscripcio());
		return SUCCESS;
	}
	
	public String mostrarItemsVotats(){

		try
		{
			Map session = ActionContext.getContext().getSession();
			Usuari usuari = ((Usuari)session.get(Constants.SESSIO_USUARI_AUTENTICAT));

			List<Lectura> llistaLectures = new ArrayList<Lectura>();		
			Lectura lectura;
			Item item;
			LecturaJSONWrapper lJSON;
			ItemJSONWrapper iJSON;
			SubscripcioJSONWrapper sJSON;
			List<LecturaJSONWrapper> llistaReturn = new ArrayList<LecturaJSONWrapper>();
						
			llistaLectures = subscripcioService.mostrarLecturesVotades(usuari);	
			Iterator<Lectura> it = llistaLectures.iterator();

			while (it.hasNext())
			{
				lectura = (Lectura)it.next();
				lJSON = new LecturaJSONWrapper();
				lJSON.setId(lectura.getId());
				lJSON.setLlegida(lectura.isLlegida());
				lJSON.setValorada(lectura.isValorada());
				
				iJSON = new ItemJSONWrapper();
				item = lectura.getItem();
				iJSON.setId(item.getId());
				iJSON.setDataPublicacio(item.getDataPublicacio());
				iJSON.setContingut(item.getContingut());
				iJSON.setLink(item.getLink());
				iJSON.setTitol(item.getTitol());
				lJSON.setItem(iJSON);
				
				sJSON = new SubscripcioJSONWrapper();
				sJSON.setId(idSubscripcio);

				lJSON.setSubscripcio(sJSON);
				
				llistaReturn.add(lJSON);
			}
			setLectures(llistaReturn);

		}
		catch (Exception e) 
		{
			addActionError(getText("error.mostrarFeedAction.errorGeneric"+feedURL));
			e.printStackTrace();
			return ERROR;		
		}
		
		return SUCCESS;
	}

}